package com.dinglian.ots.service;

import com.alibaba.fastjson.JSONObject;
import com.dinglian.ots.dao.model.BrandWithBLOBs;
import com.dinglian.ots.vo.brand.*;
import com.dinglian.ots.vo.buyer.InviteVo;
import com.dinglian.ots.vo.buyer.SearchBuyerVo;
import com.dinglian.ots.vo.order.BuyerOrderVo;
import com.dinglian.ots.vo.order.ProductOrderVo;
import com.github.pagehelper.PageInfo;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author wangbo
 */
public interface BrandService {

    /**
     * 获取品牌列表
     * @param userId
     * @param categoryId
     * @param keyword
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageInfo<BrandVo> getBrandList(Integer userId,Integer categoryId,String keyword,Integer pageNum,Integer pageSize);

    /**
     * 获取推荐品牌
     * @param pageNum
     * @param pageSize
     * @param categoryId
     * @return
     */
    PageInfo<BrandVo> getRecommendBrand(Integer pageNum, Integer pageSize,Integer categoryId);

    /**
     * 获取top榜单
     * @param pageNum
     * @param pageSize
     * @param sort
     * @param categoryId
     * @return
     */
    Set<TopBrandVo> getTopBillboard(Integer pageNum, Integer pageSize, Integer sort,Integer categoryId);

    /**
     * 获取品牌详情
     * @param userId
     * @param brandId
     * @return
     */
    BrandDetailVo getBrandDetail(Integer userId, Integer brandId);

    /**
     * 申请通过/驳回
     * @param agreeVo
     */
    void agreeIntention(AgreeVo agreeVo);

    /**
     * 同步品牌数据
     * @param jsonObject
     * @param phone
     */
    void synchronizeBrandInfo(JSONObject jsonObject,String phone);

    /**
     * 保存品牌信息
     * @param brandVo
     */
    void updateBrandInfo(SaveBrandVo brandVo);

    /**
     * 设置品牌订货规则
     * @param brandRuleVo
     */
    void setBrandOrderRule(BrandRuleVo brandRuleVo);

    /**
     * 获取品牌信息
     * @param brandId
     * @return
     */
    BrandInfoVo getBrandInfo(Integer brandId);

    /**
     * 查询品牌订货规则
     * @param brandId
     * @return
     */
    List<BrandRuleInfoVo> getBrandOrderRule(Integer brandId);

    /**
     * 删除订货规则
     * @param ruleId
     */
    void deleteBrandOrderRule(Integer ruleId);

    /**
     * 查询选款单
     * @param brandId
     * @param seasonId
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageInfo<BuyerOrderVo> brandElectionOrder(Integer brandId, Integer seasonId,Integer pageNum,Integer pageSize);

    /**
     * 品牌导出选款单
     * @param userId
     * @param seasonId
     * @param brandId
     * @param response
     */
    void exportBrandElectionOrder(Integer userId, Integer seasonId, Integer brandId, HttpServletResponse response);

    /**
     * 邀请买手
     * @param inviteVo
     */
    void inviteBuyer(InviteVo inviteVo);

    /**
     * 邀请买手列表
     * @param brandId
     * @param type
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageInfo<SearchBuyerVo> inviteBuyerList(Integer brandId, Integer type,Integer pageNum,Integer pageSize);

    /**
     * 设置退换货率
     * @param returnRatioVo
     */
    void setReturnRatio(ReturnRatioVo returnRatioVo);

    /**
     * 设置不感兴趣
     * @param brandId
     * @param storeId
     */
    void setIsInterested(Integer brandId, Integer storeId);

    /**
     * 是否认证通过
     */
    boolean isAuthSuccess(Integer userId,Integer brandId);

    /**
     * 推荐top品牌
     * @param pageNum
     * @param pageSize
     * @param categoryId
     * @return
     */
    PageInfo<BrandTopVo> getRecommendTopBrand(Integer pageNum, Integer pageSize, Integer categoryId);

    /**
     * 查询品牌父级Id
     * @param userId
     * @return
     */
    Integer selectBrandParentId(Integer userId);


}
